/!\ WARNING : chi² –> test d’indépendance : H0 “Les données sont indépendantes”. La p-value correspond au risque de se tromper en rejettant H0. Donc si p>0.05 –> on ne rejette pas H0, les données sont indépendantes, pas de relation entre elles ni d’implication. Donc si p<=0.05 –> on rejette H0, les données sont dépendantes, il existe une relation entre elles.
library(tidyverse)
library(ade4)
library(vegan)
–> communautés : quelles sont les espèces qui vivent ensemble ? même localisation ? exemple : Est-ce que pinson toujours avec pie ? –> habitat : différentes répartitions selon la localisation ? exemple : Quand il fait chaud, les pinsons ne blairent plus les pies ?
==> impact de l’environnement sur la répartition des espèces –> interactions ou évitements
ANALYSE : ==> test du Chi² pour vérifier la dépendance entre les données localisations et présence de l’espèce ==> ACM(commu) : nous avons des données utilisant des modalités simples avec j individus et i localisations ==> expected : groupes d’oiseaux, oiseaux “ubiquitaires” ==> test corrélation des variables entre-elles pour diminuer le nombre de variables à étudier ==> ACP(habitat) : lissage des données qualitatives au besoin, réduction du nombre de variables ==> co-inertie = ACM+ACP : couplage de tableaux entre habitat et répartition espèces ==> expected : présence de cluster en fonction de certaines caractéristiques du milieu
==> conclure : comportements différents selon la qualité de vie du milieu (caractéristiques ciblées par l’analyse)
suite analyse pour q3
habitat = read.table("../data/habitat.tsv", sep = "\t",
stringsAsFactors = T, header = T, na.strings = T)
especes = read.table("../data/especes.tsv", sep = "\t",
stringsAsFactors = T, header = T, na.strings = T)
commu = read.table("../data/communautes.tsv", sep = "\t",
stringsAsFactors = T, header = T, na.strings = T)
#test de la répartition d'une espèce d'oiseau en fonction de l'environnement
commu_clean = commu[,-1]
habitat_clean = habitat[,-1]
esp = colnames(commu_clean[1,])
hab = colnames(habitat_clean[1,])
write(x = "Test de chi2 sur la répartition d'une espèce d'oiseau en fonction de l'environnement", file = "chi-2_q1_export.txt", append = F)
n=0
for (i in 1:length(commu_clean[1,])){
n=n+1
commuI = paste("\n----------", esp[n], "----------")
write(x = commuI, file = "chi-2_q1_export.txt", append = T)
m = 0
for (j in 1:length(habitat_clean[1,])){
m=m+1
chi2 = chisq.test(commu_clean[,i], habitat_clean[,j])
habitatI = paste(hab[m], ":", chi2$p.value)
write(x = habitatI, file = "chi-2_q1_export.txt", append = T)
}
}
write(x = "Résultats d'indépendance entre les données", file = "chi-2_q1_export_indep.txt", append = F)
write(x = "Résultats de dépendance entre les données", file = "chi-2_q1_export_dep.txt", append = F)
n=0
for (i in 1:length(commu_clean[1,])){
n=n+1
commuI = paste("\n----------", esp[n], "----------")
write(x = commuI, file = "chi-2_q1_export_indep.txt", append = T)
write(x = commuI, file = "chi-2_q1_export_dep.txt", append = T)
m = 0
for (j in 1:length(habitat_clean[1,])){
m=m+1
chi2 = chisq.test(commu_clean[,i], habitat_clean[,j])
habitatI = paste(hab[m], ":", chi2$p.value)
if (chi2$p.value<0.05){
write(x = habitatI, file = "chi-2_q1_export_dep.txt", append = T)
}
else{
write(x = habitatI, file = "chi-2_q1_export_indep.txt", append = T)
}
}
}
pathfile : chi-2_q2_export_dep.txt
pathfile : chi-2_q2_export_indep.txt
pathfile : chi-2_q2_export.txt
plot(habitat)
res = chisq.test(habitat[,4:19]) ; res
##
## Pearson's Chi-squared test
##
## data: habitat[, 4:19]
## X-squared = 690042, df = 13695, p-value < 2.2e-16
# Dépendance des données
acp_habitat = dudi.pca(habitat[,4:19], scale=T, nf = 2, scannf = F)
plot(acp_habitat$li,
pch = 3)
s.corcircle(acp_habitat$co,
grid = F)
acp_habitat$c1
## CS1 CS2
## long -0.28220786 0.096503992
## lat -0.21011116 0.361947976
## agri -0.24629728 0.145164973
## arbu 0.04667534 -0.300078275
## prai -0.12185444 0.161730500
## hydro 0.09465626 0.007728365
## foret 0.31571473 -0.078104816
## heter -0.25723888 -0.299136122
## ecot -0.23874791 -0.404577352
## fcoeur 0.31705334 0.171227746
## lisi -0.20887190 -0.397278555
## pente 0.29376299 -0.217028999
## alt 0.32254790 -0.071134350
## prec 0.33365837 -0.164285853
## temp -0.30359650 0.144051605
## bati -0.16950428 -0.419555865
# 1 variable expliquant peu le modèle : hydro (faible pourcentage d'explication des axes, <10%)
plot(commu)
res = chisq.test(commu[,2:17]) ; res
##
## Pearson's Chi-squared test
##
## data: commu[, 2:17]
## X-squared = 8237.7, df = 13695, p-value = 1
# Indépendance des données
afc1 = dudi.coa(commu[,-1], nf=2, scannf = F) ; afc1
## Duality diagramm
## class: coa dudi
## $call: dudi.coa(df = commu[, -1], scannf = F, nf = 2)
##
## $nf: 2 axis-components saved
## $rank: 15
## eigen values: 0.3929 0.1814 0.1501 0.1374 0.1232 ...
## vector length mode content
## 1 $cw 16 numeric column weights
## 2 $lw 914 numeric row weights
## 3 $eig 15 numeric eigen values
##
## data.frame nrow ncol content
## 1 $tab 914 16 modified array
## 2 $li 914 2 row coordinates
## 3 $l1 914 2 row normed scores
## 4 $co 16 2 column coordinates
## 5 $c1 16 2 column normed scores
## other elements: N
barplot(afc1$eig)
scatter(afc1)
# Log des données
caract_habitat = habitat[,-(1:3)]
log_habitat = log(caract_habitat +1)
cca = pcaiv(afc1, log_habitat, scannf = F, nf = 2)
#projection axe d'inertie
s.corcircle(cca$as)
# Position des relevés par combinaisons de variables environnementales : représentation des sites
s.label(cca$l1, clabel = 0, cpoint = 1.5)
# Position des espèces à la moyenne des sites qui les contiennent : représentation des espèces
s.label(cca$co, add.plot = T)
# Poids canoniques donnant les combinaisons de variance unité
s.arrow(cca$fa)
# Prédiction des positions par régression sur les variables de milieu
s.match(cca$li, cca$ls, clabel = 0.5)
# Ensemble des résultats de l'analyse
plot(cca)
acc1 = cca(commu[,-1], caract_habitat)
plot(acc1)
#répartition lisière de foret et foret à l'opposé, coeur de la foret corrélé à foret
acc2 = cca(commu[,-1] ~ bati + agri + arbu + fcoeur + prai + foret, caract_habitat)
plot(acc2)
#explication de la répartition avec les conditions occupations du sol et urbanisation
#agri, bati, hydro, foret à conserver
acc3 = cca(commu[,-1] ~ bati + agri + fcoeur + foret, caract_habitat)
plot(acc3)
# urbanisation opposé à réseau hydrographique, surface agricole opposé à foret
#test de la répartition d'une espèce d'oiseau en fonction des autres espèces
commu_clean = commu[,-1]
esp = colnames(commu_clean[1,])
taille = length(commu_clean[1,])-1
write(x = "Test de chi2 sur la répartition d'une espèce d'oiseau en fonction des autres", file = "chi-2_q1_export2.txt", append = F)
for (i in 1:taille){
commuI = paste("\n----------", esp[i], "----------")
write(x = commuI, file = "chi-2_q1_export2.txt", append = T)
deb = i+1
for (j in deb:taille){
chi2 = chisq.test(commu_clean[,i], commu_clean[,j])
espI = paste(esp[j], ":", chi2$p.value)
write(x = espI, file = "chi-2_q1_export2.txt", append = T)
}
}
write(x = "Résultats d'indépendance entre les données", file = "chi-2_q1_export2_indep.txt", append = F)
write(x = "Résultats de dépendance entre les données", file = "chi-2_q1_export2_dep.txt", append = F)
for (i in 1:taille){
commuI = paste("\n----------", esp[i], "----------")
write(x = commuI, file = "chi-2_q1_export2_indep.txt", append = T)
write(x = commuI, file = "chi-2_q1_export2_dep.txt", append = T)
deb = i+1
for (j in deb:taille){
chi2 = chisq.test(commu_clean[,i], commu_clean[,j])
espI = paste(esp[j], ":", chi2$p.value)
if (chi2$p.value<0.05){
write(x = espI, file = "chi-2_q1_export2_dep.txt", append = T)
}
else{
write(x = espI, file = "chi-2_q1_export2_indep.txt", append = T)
}
}
}
discrim needs class
couplage = cbind(commu[,-1], habitat[,-1])
habitat_numerique = habitat[,-(1:3)]
#AFC sur tableau de comptage
afc_commu = dudi.coa(commu[,-1], nf=2, scannf = F)
scatter(afc_commu)
#ACP normée sur milieu
acp_habitat = dudi.pca(habitat_numerique, scale=T, nf = 2, scannf = F)
#set même poids partout
acp_habitat$lw <- rep(1, length(acp_habitat$lw))
afc_commu$lw <- rep(1, length(afc_commu$lw))
coinertie = coinertia(acp_habitat, afc_commu, scannf = F, nf = 2)
plot(coinertie)
scatter(coinertie)
#AFC sur couplage
afc_couplage = dudi.coa(couplage, scannf = F, nf = 2)
scatter(afc_couplage)
–> espèces : caractéristiques
–> habitat : caractéristiques
==> impact de l'habitat sur les caractéristiques de l'espèce
–> petit ou grand selon la température, etc …
Ouverture des données :
habitat = read.table("../data/habitat.tsv", sep = "\t",
stringsAsFactors = T, header = T, na.strings = T)
especes = read.table("../data/especes.tsv", sep = "\t",
stringsAsFactors = T, header = T, na.strings = T)
commu = read.table("../data/communautes.tsv", sep = "\t",
stringsAsFactors = T, header = T, na.strings = T)
habitat = habitat[,-2:-3]
name = colnames(habitat)
colnames(habitat) = name
ANALYSE :
Création des subsets de numéro de lieu ayant des Gem (Colombe.a.croissants)
# Récupération des noms des colonnes correspondant aux espèces (colonnes 2 à 17)
vectNom = names(commu[2:17])
# Création d'une liste vide pour stocker les sous-ensembles
listSubsets = list()
# Parcours de toutes les espèces
for (i in 1:length(vectNom)) {
especesActu = vectNom[i]
# Extraction des numéros de lieu (IdPE) où l'espèce a une présence (valeur 1)
foosubset = commu$IdPE[commu[[especesActu]] == 1]
listSubsets[[especesActu]] = foosubset
}
listSubsets$Gem
## [1] 155 162 163 167 168 217 223 229 235 250 253 262 271 289 294 308 309 314
## [19] 315 316 320 326 349 374 376 381 386 403 416 431 450 453 456 457 459 466
## [37] 467 483 484 504 517 521 522 535 540 546 561 565 568 570 572 575 592 599
## [55] 601 602 620 621 624 625 627 653 667 677 679 681 683 685 687 690 696 702
## [73] 714 717 718 720 721 723 725 734 735 736 751 756 765 782 783 784 785 786
## [91] 788 792 797 798 808 809 813 815 819 820 822 825 826 827 834 835 836 837
## [109] 841 844 845 846 849 851 852 853 855 866 870 875 877 880 882 887 891 893
## [127] 900 903 904 908 909
On a toutes les localisation de chaque espèce
Exemple d’appel pour les localisation de Gem : listSubsets$gem
Pour se donner une idée de vers ou on vas, nous allons regarder chaque moyenne de variables
par(mfrow = c(1,1))
ExGem = colMeans(subset(habitat, habitat$IdPE %in% listSubsets$Gem))
plot(ExGem[-1])
Nous voyons que les unitées sont biaisées, il est donc nécécaire de normaliser
Généraliser par une boucle tapply :
ExMat = t(sapply(names(listSubsets), function(name) {
colMeans(subset(habitat, habitat$IdPE %in% listSubsets[[name]]))
}))
ExMat = ExMat[,-1]
/!\ sapply == tapply mais pour sortir une matrice et pas une liste /!\
chisq.test(habitat[,2:17])
##
## Pearson's Chi-squared test
##
## data: habitat[, 2:17]
## X-squared = 690042, df = 13695, p-value < 2.2e-16
for (i in 2:17){
print(chisq.test(habitat[,i]))
}
##
## Chi-squared test for given probabilities
##
## data: habitat[, i]
## X-squared = 313058, df = 913, p-value < 2.2e-16
##
##
## Chi-squared test for given probabilities
##
## data: habitat[, i]
## X-squared = 89333, df = 913, p-value < 2.2e-16
##
## Chi-squared test for given probabilities
##
## data: habitat[, i]
## X-squared = 233.85, df = 913, p-value = 1
##
## Chi-squared test for given probabilities
##
## data: habitat[, i]
## X-squared = 56.511, df = 913, p-value = 1
##
## Chi-squared test for given probabilities
##
## data: habitat[, i]
## X-squared = 270.42, df = 913, p-value = 1
##
##
## Chi-squared test for given probabilities
##
## data: habitat[, i]
## X-squared = 8438.3, df = 913, p-value < 2.2e-16
##
## Chi-squared test for given probabilities
##
## data: habitat[, i]
## X-squared = 199.98, df = 913, p-value = 1
##
## Chi-squared test for given probabilities
##
## data: habitat[, i]
## X-squared = 232.85, df = 913, p-value = 1
##
##
## Chi-squared test for given probabilities
##
## data: habitat[, i]
## X-squared = 10470, df = 913, p-value < 2.2e-16
##
## Chi-squared test for given probabilities
##
## data: habitat[, i]
## X-squared = 501.45, df = 913, p-value = 1
##
##
## Chi-squared test for given probabilities
##
## data: habitat[, i]
## X-squared = 56212, df = 913, p-value < 2.2e-16
##
##
## Chi-squared test for given probabilities
##
## data: habitat[, i]
## X-squared = 4639.3, df = 913, p-value < 2.2e-16
##
##
## Chi-squared test for given probabilities
##
## data: habitat[, i]
## X-squared = 242481, df = 913, p-value < 2.2e-16
##
##
## Chi-squared test for given probabilities
##
## data: habitat[, i]
## X-squared = 167676, df = 913, p-value < 2.2e-16
##
##
## Chi-squared test for given probabilities
##
## data: habitat[, i]
## X-squared = 70.922, df = 913, p-value = 1
##
## Chi-squared test for given probabilities
##
## data: habitat[, i]
## X-squared = 18.291, df = 913, p-value = 1
Les colonnes satisfaisant le Chi-test :
boxplot(ExMat,
pch = 3, col = "darkred",
log = "y")
Boxplot avec une normalisation au log10()
ExMat.meannorm = scale(ExMat, center = T, scale = T)
boxplot.matrix(ExMat.meannorm, col = "darkred")
normalisation centré réduite à la moyenne
Des boxplots plus interresant (par classe):
par(mfrow = c(1,2))
# 1. Point d'écoute :
plot(ExMat[,1:2],
pch = 3, col = "brown")
acp.Ecoute = dudi.pca(ExMat[,1:2], center = TRUE, scale = TRUE,
,scannf = FALSE, nf = 1)
plot(acp.Ecoute$li,
pch = 3, col = "brown")
#corrélation +
# 2. Occupation du sol :
boxplot(ExMat[,3:7],
pch = 3, col = "darkgreen")
acp.Ocuu = dudi.pca(ExMat[,3:7], center = TRUE, scale = TRUE,
scannf = FALSE, nf = 2)
plot(acp.Ocuu$li,
pch = 3, col = "darkgreen")
# pas de corrélation
# 3. Fragmentation :
boxplot(ExMat[,8:11],
pch = 3, col = "salmon")
acp.Frag = dudi.pca(ExMat[,8:11], center = TRUE, scale = TRUE,
scannf = FALSE, nf = 2)
plot(acp.Frag$li,
pch = 3, col = "salmon")
# pas de corrélation
# 4. Topographie
plot(ExMat[,12:13],
pch = 3, col = "black")
acp.Topo = dudi.pca(ExMat[,12:13], center = TRUE, scale = TRUE,
scannf = FALSE, nf = 1)
plot(acp.Topo$li,
pch = 3, col = "black")
# corrélation +
# 5. condition topographique
plot(ExMat[,14:15],
pch = 3, col = "darkblue")
acp.CondTopo = dudi.pca(ExMat[,14:15], center = TRUE, scale = TRUE,
scannf = FALSE, nf = 1)
plot(acp.CondTopo$li,
pch = 3, col = "darkblue")
# corrélation -
# 6. Urbanisation
par(mfrow = c(1,1))
boxplot(ExMat[,16],
pch = 3, col = "darkgray")
# c'est une ligne
# 7. Total
par(mfrow = c(1,2))
boxplot(ExMat,
pch = 3, col = "darkred",
las = 2, log = "y")
acp.Total = dudi.pca(ExMat[,1:15], center = TRUE, scale = TRUE,
scannf = FALSE, nf = 2)
# bordel imonde
Point d’écoute semble avoir une corrélation positive
Occupation du sol ne semble pas être corrélé
Fragmentation ne semble pas être corrélé
Topographie semble être corrélé positivement
condition topographique semble être corrélé négativement
--> Ex : taille petite quand température haute, alimentation quand hydrométrie élevée
Faire des AFD par catégorie pour voir si impact sur l’alimentation
# discrimin = AFD
# les arg : (acp, var qualitative)
afd.Ecoute.Taille = discrimin(acp.Ecoute,as.factor(especes$Taille)
, scannf = FALSE, nf = 2)
plot(afd.Ecoute.Taille)
#########
afd.Ocuu.Taille = discrimin(acp.Ocuu,as.factor(especes$Taille)
, scannf = FALSE, nf = 2)
plot(afd.Ocuu.Taille)
########
afd.Frag.Taille = discrimin(acp.Frag,as.factor(especes$Taille)
, scannf = FALSE, nf = 2)
plot(afd.Frag.Taille)
########
afd.Mat.Taille = discrimin(acp.Topo,as.factor(especes$Taille)
, scannf = FALSE, nf = 2)
plot(afd.Ecoute.Taille)
########
afd.CondTopo.Taille = discrimin(acp.CondTopo,as.factor(especes$Taille)
, scannf = FALSE, nf = 2)
plot(afd.CondTopo.Taille)
Lieu d’écoute vs Taille des espèces :
pas de création concluante de classe
12 et 23 peu expliquer par les 2 axes
20 et 24 ont les coordonnées similaires 9 et 30 // (// == pareil qu’au dessus) 11 et 14 // 11, 14 et 20,24 sont opposé
Ocuu vs Taille des espèces :
toujours aucune classe concluante à part pour grouper le groupe 12 : Moqueur.grivotte
15 peu expliquer par le modèle arbu et hydro sont peu explicatif de notre modèle
l’espèce 23 a tendance a se retrouver en foret avec des grandes surfaces agricole
Frag vs Taille des espèces :
rien de concluant
Les 4 variables sont explicative mais ont des vélocités colinéaires
l’espèce 30 est très ecot mais très peu heter et lisi
Topo vs Taille des espèces :
pas de création concluante de classe
Les 2 variables sont explicative mais ont des vélocités colinéaires
sépare les espèces correctment ___
CondTopo vs Taille des espèces :
same
Les 2 variables sont explicative mais ont des vélocités colinéaires
Global : on ne peut pas classer la taille des espèces en fonction de l’environnement
Cependant on voit que on peut séparer les tailles des espèces par l’environnement
–> habitat : urbanisation –> communautés : répartition des espèces
==> impact de l’urbanisation sur la répartition attendues naturelles des espèces –> moins d’espèces 1 ou plus d’espèces 2 en zones urbaines que rurales…
ANALYSE : ==> chi² entre commu et habitat\(bati ==> ACP(commu[,2:length(commu[1,])]~habitat\)bati)
==> conclure : certaines espèces fuient les milieux urbains quand d’autres si refugent
–> habitat : urbanisation –> espèces : taille
==> impact de l’urbanisation sur la taille des oiseaux (diminution de la taille pour se cacher de l’Homme ?)
habitat = read.table("../data/habitat.tsv", sep = "\t",
stringsAsFactors = T, header = T, na.strings = T)
habitat = habitat[,-2:-3] # on supprime le qualitatif
especes = read.table("../data/especes.tsv", sep = "\t",
stringsAsFactors = T, header = T, na.strings = T)
commu = read.table("../data/communautes.tsv", sep = "\t",
stringsAsFactors = T, header = T, na.strings = T)
# Récupération des noms des colonnes correspondant aux espèces (colonnes 2 à 17)
vectNom <- c("Myo", "Gem", "Meh", "Col", "Lon", "Cir", "Euh", "Orc", "Euj", "Cof", "Dep", "Mas", "Maf", "Saa", "Elm", "Tul")
# Création d'une liste vide pour stocker les sous-ensembles
listSubsets = list()
# Parcours de toutes les espèces
for (i in 1:length(vectNom)) {
especesActu = vectNom[i]
# Extraction des numéros de lieu (IdPE) où l'espèce a une présence (valeur 1)
foosubset = commu$IdPE[commu[[especesActu]] == 1]
listSubsets[[especesActu]] = foosubset
}
# /!\ va faire vla des lignes de variables :
for (i in seq_along(vectNom)) {
subset_name <- paste0(vectNom[i], "habitat")
assign(subset_name, subset(habitat, IdPE %in% listSubsets[[vectNom[i]]]))
# Modify column 20 with corresponding 'Taille' value
temp_df <- get(subset_name)
temp_df[, 18] <- especes$Taille[i]
assign(subset_name, temp_df)
}
faire les dataframes
on a les positions des oiseaux par espèces dans les n° IDPG
faire les Chi² pour voir si la taille est indépendente chez chaque espèces :
chi_results <- list()
for (nom in vectNom) {
subset_name <- paste0(nom, "habitat")
temp_df <- get(subset_name)
if ("bati" %in% colnames(temp_df)) { # Ensure 'bati' column exists
chi_results[[nom]] <- chisq.test(temp_df$bati)
} else {
chi_results[[nom]] <- paste("Column 'bati' not found in", subset_name)
}
}
malaise,
on regrope par intervalle de taille
test cor.test entre taille et urbanisation
meanList = c()
meanList = append(meanList, mean(Myohabitat$bati))
meanList = append(meanList, mean(Gemhabitat$bati))
meanList = append(meanList, mean(Mehhabitat$bati))
meanList = append(meanList, mean(Colhabitat$bati))
meanList = append(meanList, mean(Lonhabitat$bati))
meanList = append(meanList, mean(Cirhabitat$bati))
meanList = append(meanList, mean(Euhhabitat$bati))
meanList = append(meanList, mean(Orchabitat$bati))
meanList = append(meanList, mean(Eujhabitat$bati))
meanList = append(meanList, mean(Cofhabitat$bati))
meanList = append(meanList, mean(Dephabitat$bati))
meanList = append(meanList, mean(Mashabitat$bati))
meanList = append(meanList, mean(Mafhabitat$bati))
meanList = append(meanList, mean(Saahabitat$bati))
meanList = append(meanList, mean(Elmhabitat$bati))
meanList = append(meanList, mean(Tulhabitat$bati))
on a les moyennes : chi² time :)
#normalité :
shapiro.test(meanList)
##
## Shapiro-Wilk normality test
##
## data: meanList
## W = 0.93103, p-value = 0.2532
shapiro.test(especes$Taille)
##
## Shapiro-Wilk normality test
##
## data: especes$Taille
## W = 0.91199, p-value = 0.1253
données normales
plot(meanList,especes$Taille,
pch =3, col = "red3",
ylab = "taille des especes",xlab = "moyenne urbanisation par espèces")
Bah pas fou mais globalement avec clémence, on semble voir une tendence à la décroissance
library(lmtest)
bptest(meanList~especes$Taille)
##
## studentized Breusch-Pagan test
##
## data: meanList ~ especes$Taille
## BP = 0.34564, df = 1, p-value = 0.5566
données homostasiques
Conditions valides : happy
cor.test(especes$Taille,meanList,
method = "pearson")
##
## Pearson's product-moment correlation
##
## data: especes$Taille and meanList
## t = -1.7395, df = 14, p-value = 0.1039
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.75872141 0.09372149
## sample estimates:
## cor
## -0.4215692
cor.test(especes$Taille,meanList,
method = "kendall")
##
## Kendall's rank correlation tau
##
## data: especes$Taille and meanList
## z = -1.4506, p-value = 0.1469
## alternative hypothesis: true tau is not equal to 0
## sample estimates:
## tau
## -0.2735942
cor.test(especes$Taille,meanList,
method = "spearman")
##
## Spearman's rank correlation rho
##
## data: especes$Taille and meanList
## S = 958.44, p-value = 0.1153
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## -0.4094659
t = -1.7395, df = 14, p-value = 0.1039 alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval: -0.75872141 0.09372149
sample estimates: cor -0.4215692
La taille de l’espèce et le taux d’urbanisation est négativement corrélé
–> habitat : urbanisation –> espèces : protégée ou non ?
==> est-ce que les oiseaux protégés sont davantages présents dans les milieux urbains : protection intense par l’Homme, abondance de nourriture, absence de prédateurs, habitats cachés et sécuritaires…
==> chi² entre habitat bati et especes IUCN
en premier on va faire une ACM entre les espèces sauf la taille et
vectCol = c("IdPE","agri","arbu","prai","foret","bati")
habitaEnv.subset = subset(habitat,select = vectCol)
# Récupération des noms des colonnes correspondant aux espèces (colonnes 2 à 17)
vectNom <- c("Myo", "Gem", "Meh", "Col", "Lon", "Cir", "Euh", "Orc", "Euj", "Cof", "Dep", "Mas", "Maf", "Saa", "Elm", "Tul")
# Création d'une liste vide pour stocker les sous-ensembles
listSubsets = list()
# Parcours de toutes les espèces
for (i in 1:length(vectNom)) {
especesActu = vectNom[i]
# Extraction des numéros de lieu (IdPE) où l'espèce a une présence (valeur 1)
foosubset = commu$IdPE[commu[[especesActu]] == 1]
listSubsets[[especesActu]] = foosubset
}
# /!\ va faire vla des lignes de variables :
on va faire comme a la Q4 mais avec plus de variable
# Liste des noms d'habitat
habitat_names <- c("Myohabitat", "Gemhabitat", "Mehhabitat", "Colhabitat", "Lonhabitat",
"Cirhabitat", "Euhhabitat", "Orchabitat", "Eujhabitat", "Cofhabitat",
"Dephabitat", "Mashabitat", "Mafhabitat", "Saahabitat", "Elmhabitat", "Tulhabitat")
# liste des diminutif des noms
vectNom <- c("Myo", "Gem", "Meh", "Col", "Lon", "Cir", "Euh", "Orc", "Euj",
"Cof", "Dep", "Mas", "Maf", "Saa", "Elm", "Tul")
# Liste des colonnes d'intérêt
vectCol <- c("agri", "arbu", "prai", "foret", "bati")
# Initialisation d'une liste pour stocker les données
meanList <- data.frame(matrix(ncol = length(vectCol) + 1, nrow = length(habitat_names)))
# Nommer les colonnes du dataframe
colnames(meanList) <- c("habitat", vectCol)
# Remplir le dataframe
for (i in seq_along(habitat_names)) {
habitat <- habitat_names[i]
habitat_data <- get(habitat) # Récupération du dataframe
# Calcul des moyennes pour chaque colonne d'intérêt
mean_values <- sapply(vectCol, function(col) mean(habitat_data[[col]], na.rm = TRUE))
# Stockage des résultats
meanList[i, ] <- c(habitat, mean_values)
}
# Convertir la colonne 'habitat' en facteur ou caractère
meanList$habitat <- as.character(vectNom)
# Affichage du résultat
meanList = data.frame(meanList)
# Conversion des colonnes en numérique car bozo est char
meanList[,-1] <- lapply(meanList[,-1], as.numeric)
faire les dataframes
ACM entre les moyennes et les espèces :
ACM_Espèces = dudi.acm(especes[,-6],
scannf = FALSE, nf = 2)
boxplot(ACM_Espèces)
acp.meanhabi = dudi.pca(meanList[,-1],
center = T, scale = T,
scannf = FALSE, nf = 2)
acm.espèces = dudi.acm(as.data.frame(especes[-6]),
scannf = FALSE, nf = 2)
boxplot(acm.espèces)
coinertie = coinertia(acm.espèces,acp.meanhabi,
scannf = FALSE, nf = 2); summary(coinertie)
## Coinertia analysis
##
## Class: coinertia dudi
## Call: coinertia(dudiX = acm.espèces, dudiY = acp.meanhabi, scannf = FALSE,
## nf = 2)
##
## Total inertia: 2.857
##
## Eigenvalues:
## Ax1 Ax2 Ax3 Ax4 Ax5
## 2.2849117 0.5220622 0.0381169 0.0118412 0.0003562
##
## Projected inertia (%):
## Ax1 Ax2 Ax3 Ax4 Ax5
## 79.96784 18.27125 1.33403 0.41442 0.01247
##
## Cumulative projected inertia (%):
## Ax1 Ax1:2 Ax1:3 Ax1:4 Ax1:5
## 79.97 98.24 99.57 99.99 100.00
##
## Eigenvalues decomposition:
## eig covar sdX sdY corr
## 1 2.2849117 1.5115925 0.7922154 1.977465 0.9649009
## 2 0.5220622 0.7225387 0.7384785 1.006445 0.9721502
##
## Inertia & coinertia X (acm.espèces):
## inertia max ratio
## 1 0.6276052 0.891648 0.7038711
## 12 1.1729557 1.729395 0.6782461
##
## Inertia & coinertia Y (acp.meanhabi):
## inertia max ratio
## 1 3.910367 3.919180 0.9977513
## 12 4.923298 4.923885 0.9998808
##
## RV:
## 0.2988435
s.corcircle(coinertie$li)
plot(coinertie)
on arrive a séparer les espèces en fonctions decès variables environnementales
X = acm Y = acp
==> conclure :
l’ACP explique super bien la co-inertie l’ACM moins mais explique quand même les 2 axes
Les 2 ont une bonne corrélation car les projection de tabX et tabY (les projections des 2 axes) sont très proches.
on voit que les variables espèces sont corrélée avec les variables